﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsFoto_CRN:clsEstado,IControlEstados
    {
        public clsFotos Fotos { get; set; }
        public byte[] Imagen { get; set; }
        public string Observaciones { get; set; }
        public string Tipo { get; set; }
        public int ID { get; set; }

        public clsFoto_CRN(clsFotos objFotos, string strTipo):base()
        {
            this.Fotos = objFotos;
            this.Observaciones = string.Empty;
            this.Tipo = strTipo;
            this.Imagen = new byte[10];
        }

        #region Métodos

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return AgregaFotos();
                else
                {
                    if (this.EsModificado)
                        return ModificaFotos();
                    else
                        return EliminaFotos();
                }
            }
            return false;
        }

        private bool EliminaFotos()
        {
            clsFoto_CD objFotos_CD = new clsFoto_CD();
            return objFotos_CD.EliminaFotosDeAvaluo(this);
        }

        private bool ModificaFotos()
        {
            clsFoto_CD objFotos_CD = new clsFoto_CD();
            return objFotos_CD.ActualizaFotosDeAvaluo(this);
        }

        private bool AgregaFotos()
        {
            clsFoto_CD objFotos_CD = new clsFoto_CD();
            if (objFotos_CD.CreaNuevasFotosDeAvaluo(this))
            {
                this.EsModificado = true;
                clsFoto_CRN objFoto = clsFoto_CRN.RecuperaFotoDeInmueble(this.Fotos, this.Tipo);
                this.ID = objFoto.ID;
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsFoto_CRN RecuperaFotoDeInmueble(clsFotos objfotos, string strTipo)
        {
            clsFoto_CD objFotos_CD = new clsFoto_CD();
            clsFoto_CRN objFotos = new clsFoto_CRN(objfotos, strTipo);
            dsInmoviliario.FotografiasRow objFotoRecuperada = objFotos_CD.RecuperaFotoDeAvaluo(objfotos.Inmueble.Avaluo.IdAvaluo, strTipo);
            if (objFotoRecuperada != null)
            {
                objFotos.ID = objFotoRecuperada.ID;
                objFotos.Imagen = objFotoRecuperada.Imagen;
                objFotos.Observaciones = objFotoRecuperada.Observacion;
                objFotos.EsModificado = true;
            }
            return objFotos;
        }

        public static BindingList<clsFoto_CRN> RecuperaFotos(clsFotos objfotos, string strTipo)
        {
            clsFoto_CD objFotos_CD = new clsFoto_CD();
            BindingList<clsFoto_CRN> blFotos = new BindingList<clsFoto_CRN>();
            BindingList<dsInmoviliario.FotografiasRow> objFotosRecuperadas = objFotos_CD.RecuperaOtrasFotos(objfotos.Inmueble.Avaluo.IdAvaluo, strTipo);
            foreach (dsInmoviliario.FotografiasRow filaFoto in objFotosRecuperadas)
            {
                clsFoto_CRN objFoto = new clsFoto_CRN(objfotos, filaFoto.Tipo);
                objFoto.ID = filaFoto.ID;
                objFoto.Imagen = filaFoto.Imagen;
                objFoto.Observaciones = filaFoto.Observacion;
                objFoto.EsModificado = true;
                blFotos.Add(objFoto);
            }
            return blFotos;
        }
        #endregion
    }
}
